package com.feib.soeasy.service;

import java.util.ArrayList;

import org.springframework.transaction.annotation.Transactional;

import com.feib.soeasy.model.User;
import com.feib.soeasy.model.UserLoginControl;
import com.feib.soeasy.pagination.PaginatedList;

/**
 * @title (#)UserLoginControlService.java<br>
 * @description <br>
 * @author Anson Tsai<br>
 * @version 1.0.0 2010/11/25
 * @copyright Far Eastern International Bank Copyright (c) 2010<br>
 * @2010/12/5 create by Anson Tsai<br>
 */
@Transactional(readOnly = true)
public interface UserLoginControlService {

    /**
     * 使用者登入資訊是否重複，不管 enabled
     * 
     * @param userId 登入帳號
     * @param groupNo 群組/帳單業者代號
     * @return
     */
    public boolean isDuplicateUserId(String userId, String groupNo);

    /**
     * 以登入帳號取得使用者登入資訊
     * 
     * @param userId 登入帳號
     * @param groupNo 群組/帳單業者代號
     * @return
     */
    public UserLoginControl queryByUerIdGroupNo(String userId, String groupNo);

    /**
     * 啟用使用者登入資訊(set enabled property to TRUE)
     * 
     * @param userId 登入帳號
     * @param groupNo 群組/帳單業者代號
     * @return
     * @throws UserIdNotFoundException
     */
    @Transactional(readOnly = false)
    public UserLoginControl enableUserLoginInfo(String userId, String groupNo) throws UserIdNotFoundException;

    /**
     * 停用使用者登入資訊(set enabled property to FALSE)
     * 
     * @param userId 登入帳號
     * @param groupNo 群組/帳單業者代號
     * @return
     * @throws UserIdNotFoundException
     */
    @Transactional(readOnly = false)
    public UserLoginControl disableUserLoginInfo(String userId, String groupNo) throws UserIdNotFoundException;
    
    /**
     * 查詢啟用使用者登入資訊
     * @param userId 登入帳號
     * @param groupNo 群組/帳單業者代號
     * @param isBank 是否為銀行端
     * @param paginationConfig 換頁條件
     * @return
     */
    public PaginatedList<UserLoginControl> queryEnabledInfoByUserIdGroupNo(String userId, String groupNo, boolean isBank, PaginatedList<UserLoginControl> paginationConfig);
    
    /**
     * 批次更新使用者登入狀態
     * @param userLoginInfos
     */
    @Transactional(readOnly = false)
    public void disableUserLoginInfo(ArrayList<UserLoginControl> userLoginInfos);


    /**
     * @param user 使用者物件，userPk 必須有值
     * @return
     */
    public UserLoginControl findByUer(User user);

    /**
     * @param c
     */
    @Transactional(readOnly = false)
    public UserLoginControl save(UserLoginControl c);;
}
